iT邦幫忙

2022 iThome 鐵人賽

DAY 2
0

上篇提到OO的優點之一是較為直觀,例如透過類別Person定義一個me。至於Person()和me之間的關係,用以下比喻(其實是事實),初學者可能更易理解:

  • Day 1範例程式Python版中的me = Person(...),如果把Person想成double(type),把me想成變數height,這樣不就跟C語言版中的double height;很相似?差別在double是程式語言幫我們準備好的型別,而Person則屬於自訂型別,我們自己必須告訴程式語言:這個型別有哪些「內容」、有哪些「功能」。這個告知程式語言「我們的自訂型別長怎樣」的工作,實務上就是定義(註1)類別(class)。

  • 定義好Person類別後,就可以像內定型別(int, string...)一般使用,只是語法不同吧了。語法相不相同是小事,語意或語義才重要。

  • 換另一個說法:類別可視為「模板」,而me是利用Person這個模板造出來的物件(object)。

  • 上面「me是利用Person這個模板造出來的物件(object)」這句話,另一個幾乎等價的說法為:me是由Person類別實作出來的實例(instance)。

  • 在OO世界中,object和instance這兩個terms,意義非常接近。有人這樣區分兩者的細微差別:

    • OOP基本概念:Class >> Object >> Instance
    • class是「藍圖」,也就是筆者上面說的「模板」。
    • 所有根據藍圖造出的實物,例如根據房子藍圖蓋出的房子,都是該class的objects。
    • object是通用語,每一棟依藍圖興建的房子都是object,而某一特定(例如xx街xx號)的房子,就稱為instance。
    • 綜上所述,以「抽象層次」而論,class最高,object次之,instance最低。
  • 不過筆者認為,如果不是做學術研究,似乎沒有太大必要刻意區分object和instance,將兩者視為一樣即可。本系統文章亦不作區別,兩者視為同義,常object和instance混用。

  • 在OO中,class內部會有變數和函數(詳後述),class內的變數通常稱為attribute(屬性),函數則稱method(方法)。

  • 以下是OO和Procedural這兩種較普及paradigms一些術語的比較表:

    OO Procedural

    class | module, struct
    object, instance | record
    attribute | variable
    method | function
    method passing(invoking) | function call
    bottom up approach | top down approach

  • OO理論的整體介紹到此為止,下面要依序解說OO的三大(或曰四大)鼎足:

    • Encapsulation(封裝)
    • Inheritance(繼承)
    • Polymorphism(多型)

註1: 這裡定義(define)和宣告(declare)同義,不予區分。


上一篇
OO是一種Paradigm
下一篇
OO的幾大支柱
系列文
Oops! OOPP: An Introduction to Object-Oriented Programming in Python30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言